#ifndef RAT_MATRIX33_H
#define RAT_MATRIX33_H

#include <iostream>

namespace RAT_ENGINE
{
	///<summary>
	///Structure for a 3x3 matrix.
	///Contains operators and functions for calculations.
	///</summary>
	const struct RAT_Matrix33
	{
		float R11, R12, R13;
		float R21, R22, R23;
		float R31, R32, R33;
		
		//Arithmic operators
		RAT_Matrix33 operator* (const RAT_Matrix33& argMatrix) const; //Matrix multiplication
		RAT_Matrix33 operator* (const float& argScale) const; //Scalar multiplication

		//Compound operators
		RAT_Matrix33 operator*= (const RAT_Matrix33& argMatrix) const; //Matrix multiplication
		RAT_Matrix33 operator*= (const float& argScale) const; //Scalar multiplication

		//Relational operators
		bool operator== (const RAT_Matrix33& argMatrix) const; //Vector comparison
		bool operator!= (const RAT_Matrix33& argMatrix) const; //Vector comparison

		//Calculation functions
		float Determinant() const;
		RAT_Matrix33 Inverse() const;
		RAT_Matrix33 Transpose() const;

		
		//Printers
		void PrintIO();

	}RATIDENTITYMATRIX33 = 
	{
		1,0,0,
		0,1,0,
		0,0,1
	};
}

#endif